﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace Presentation
{
    public partial class QLLop : Form
    {        
        public QLLop()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void QLLop_Load(object sender, EventArgs e)
        {
            _makhoi.DataSource = BUSKhoi.getAll();
            _makhoi.DisplayMember = "tenkhoi";
            _makhoi.ValueMember = "makhoi";            
            reload();
        }

        private void reload()
        {           
            if (_makhoi.SelectedIndex >= 0)
            {
                int makhoi = (int)_makhoi.SelectedValue;
                DataTable dt = BUSLop.getAll(makhoi);                
                _dg.DataSource = dt;
                _dg.Columns[0].HeaderText = "Mã Lớp";
                _dg.Columns[1].HeaderText = "Mã Khối";
                _dg.Columns[2].HeaderText = "Tên Lớp";
                _dg.Columns[3].HeaderText = "Sỉ số";
                if (_dg.SelectedRows.Count > 0)
                {
                    _tenlop.Text = (string)_dg.SelectedRows[0].Cells["tenlop"].Value;
                }
                else
                {
                    _tenlop.Text = null;
                }
                //Quy định 2:Lớp không quá 40 học sinh
                if (dt.Rows.Count > 40)
                {
                    button1.Enabled = false;
                }
            }
        }

        private void _makhoi_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            if (cb.Focused)
            {
                reload();
            }            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (_dg.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận xóa", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    int malop = (int)_dg.SelectedRows[0].Cells[0].Value;
                    BUSLop.Delete(malop);
                    MessageBox.Show("Lớp đã được xóa vào danh sách", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    reload();
                }
            } 
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (_dg.SelectedRows.Count > 0)
            {
                var lop = new DTOLop();
                lop.MaLop = (int)_dg.SelectedRows[0].Cells[0].Value;
                lop.MaKhoi = (int)_makhoi.SelectedValue;
                lop.TenLop = _tenlop.Text;
                if (check(lop,false))
                {
                    BUSLop.Edit(lop.MaLop, lop.MaKhoi, lop.TenLop);
                    MessageBox.Show("Lớp đã được sửa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    reload();
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            add();
        }

        private void add()
        {
            var lop = new DTOLop()
            {
                MaKhoi = (int)_makhoi.SelectedValue,
                TenLop = _tenlop.Text
            };

            if (check(lop))
            {
                BUSLop.Add(lop.MaKhoi, lop.TenLop);
                MessageBox.Show("Lớp đã được thêm vào danh sách", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                reload();
            }
        }

        private void _dg_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            _tenlop.Text = _dg.SelectedRows[0].Cells["tenlop"].Value.ToString();
        }

        private bool check(DTOLop lop,bool add = true)
        {            
            StringBuilder str = new StringBuilder();
            var qd = BUSQuyDinh.DocQuyDinh();
            if (_dg.Rows.Count >= qd.Sllop && add)
            {             
                str.AppendLine("Số lượng lớp không được lớn hơn "+qd.Sllop);
            }

            if (qd.Doitenlop == false)
            {             
                str.AppendLine("Bạn không có quyền thêm lớp");
            }

            if (lop.TenLop == "")
            {                
                str.AppendLine("Vui lòng nhập tên lớp");
            }

            if (BUSLop.isDuplicate(lop))
            {
                str.AppendLine("Tên lớp đã bị trùng.Vui lòng nhập tên lớp khác");
            }

            if (str.Length > 0)
            {
                MessageBox.Show(str.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        private void _tenlop_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                add();
            }
        }
    }
}
